﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Practices.Unity;
using SISGEZATBZVisual.BusinessEntities;
using SISGEZATBZVisual.Service;
using System.Web.ModelBinding;

namespace SISGEZATBZVisual.Web.Maestros
{
    public partial class FrmMatricula : System.Web.UI.Page
    {
        [Dependency]
        public IMatriculaService MatriculaService { get; set; }
        [Dependency]
        public INivelService NivelService { get; set; }
        [Dependency]
        public IGradoService GradoService { get; set; }
        [Dependency]
        public ISeccionService SeccionService { get; set; }
        [Dependency]
        public IAlumnoService AlumnoService { get; set; }
        [Dependency]
        public IApoderadoService ApoderadoService { get; set; }
        [Dependency]
        public IAñoAcademicoService AñoAcademicoService { get; set; }


        //public Apoderado ApoderadoAGuardar { get; set; }
        //public Alumno AlumnoAGuardar { get; set; }
        

        protected void Page_Load(object sender, EventArgs e)
        {
  

    

            if (!Page.IsPostBack)
            {
                var alumno = new Alumno();
                var apoderado = new Apoderado();

                Cache.Insert("alumno", alumno);
                Cache.Insert("apoderado", apoderado);



                var accion = Request.QueryString["acc"];
                var id = Request.QueryString["id"];


                if (accion == null)
                {
                    Response.Redirect("Matriculas.aspx");
                }
                else if (accion == "editar")
                {
                    var identificador = Int32.Parse(id);

                    var matricula = MatriculaService.GeMatricula(identificador);

                    


                    ddlTipoDocumentoApoderado.SelectedValue = matricula.Alumno.Apoderado.TipoDeDocumento;
                    txtNroDocumentoApoderado.Text = matricula.Alumno.Apoderado.NroDocumento;
                    txtNombresCompletosApoderado.Text = matricula.Alumno.Apoderado.Nombres + " " +
                                                    matricula.Alumno.Apoderado.Apellidos;

                    ddlTipoDocumentoAlumno.SelectedValue = matricula.Alumno.TipoDeDocumento;
                    txtNroDocumentoAlumno.Text = matricula.Alumno.NroDocumento;
                    txtNombresCompletosAlumno.Text = matricula.Alumno.Nombres + " " + matricula.Alumno.Apellidos;



                    ddlNiveles.SelectedValue = matricula.Seccion.Grado.Nivel.Id.ToString();
                    ddlGrado.SelectedValue = matricula.Seccion.Grado.Id.ToString();
                    ddlSeccion.SelectedValue = matricula.Seccion.Id.ToString();

                    //DOCUMENTOS  <<----
                    //apoderado panel

                    ddlTipoDocumentoApoderadoPanel.SelectedValue = matricula.Alumno.Apoderado.TipoDeDocumento;
                    txtNroDocumentoApoderadoPanel.Text = matricula.Alumno.Apoderado.NroDocumento;
                    txtApellidosApoderadoPanel.Text = matricula.Alumno.Apoderado.Apellidos;
                    txtNombresApoderadoPanel.Text = matricula.Alumno.Apoderado.Nombres;
                    ddlGeneroApoderadoPanel.SelectedValue = matricula.Alumno.Apoderado.Genero;
                    txtFechaNacApoderadoPanel.Text = matricula.Alumno.Apoderado.FechaNacimiento + "";
                    txtDepartamentoApoPanel.Text = matricula.Alumno.Apoderado.Departamento;
                    txtProvinciaApoPanel.Text = matricula.Alumno.Apoderado.Provincia;
                    txtDiscritoApoPanel.Text = matricula.Alumno.Apoderado.Distrito;
                    txtDomicilioApoPanel.Text = matricula.Alumno.Apoderado.Domicilio;
                    txtTelefonoApoPanel.Text = matricula.Alumno.Apoderado.Telefono;
                    txtCentroTrabApoPanel.Text = matricula.Alumno.Apoderado.CentroDeTrabajo;


                    //alumno panel

                    ddlTipoDocumentoAlumnoPanel.SelectedValue = matricula.Alumno.TipoDeDocumento;
                    txtNroDocumentoAlumnoPanel.Text = matricula.Alumno.NroDocumento;
                    txtApellidosAlumnoPanel.Text = matricula.Alumno.Apellidos;
                    txtNombresAlumnoPanel.Text = matricula.Alumno.Nombres;
                    ddlGeneroAlumnoPanel.SelectedValue = matricula.Alumno.Genero;
                    txtFechaNacAlumnoPanel.Text = matricula.Alumno.FechaNacimiento + "";
                    txtDepartamentoAluPanel.Text = matricula.Alumno.Departamento;
                    txtProvinciaAluPanel.Text = matricula.Alumno.Provincia;
                    txtDiscritoAluPanel.Text = matricula.Alumno.Distrito;
                    txtDomicilioAluPanel.Text = matricula.Alumno.Domicilio;
                    txtTelefonoAluPanel.Text = matricula.Alumno.Telefono;


                }
 
              

            }
        }

        protected void ddlTipos_SelectedIndexChanged(object sender, EventArgs e)
        {

           
        }

        public IEnumerable<AñoAcademico> GetAllAñosAcademicos()
        {
            return AñoAcademicoService.GetAllAñosAcademicos();
        }


        public IEnumerable<Nivel> GetAllNveles()
        {
           return NivelService.GetAllNveles();
        }

        public IEnumerable<Grado> GetGradosByNivelId([Control("ddlNiveles")]Int32? idNivel)
        {
            IEnumerable<Grado> grados = new List<Grado>();
            if (idNivel.HasValue)
            {
                return GradoService.GetGradosByNivelId(idNivel.Value);
            }
            return grados.AsEnumerable();
        }

        public IEnumerable<Seccion> GetSeccionesByGradoId([Control("ddlGrado")]int ?idGrado)
        {
            IEnumerable<Seccion> secciones = new List<Seccion>();

            if (idGrado.HasValue)
            {
                return SeccionService.GetSeccionesByGradoId(idGrado.Value);
            }
            return secciones.AsEnumerable();
        }

        protected void btnBuscarDniAlumno_Click(object sender, EventArgs e)
        {


            var alumno = AlumnoService.GetAlumnoByTipoDocumentoNroDocumento(ddlTipoDocumentoAlumno.Text,
                txtNroDocumentoAlumno.Text);
            if (alumno != null)
            {
                txtNombresCompletosAlumno.Text = alumno.Nombres + " " + alumno.Apellidos;
                msjAlertaAlumno.Text = "";

                var alumnoCache = Cache.Get("alumno") as Alumno;
                alumnoCache = alumno;
                Cache.Insert("alumno",alumno);
            }
            else
            {
                txtNombresCompletosAlumno.Text = "";
                msjAlertaAlumno.Text = "El alumno no existe";
            }


        }

        protected void btnBuscarDniApoderado_Click(object sender, EventArgs e)
        {
            var apoderado = ApoderadoService.GetApoderadoByTipoDocumentoNroDocumento(ddlTipoDocumentoApoderado.Text,
             txtNroDocumentoApoderado.Text);


            if (apoderado != null)
            {
                txtNombresCompletosApoderado.Text = apoderado.Nombres + " " + apoderado.Apellidos;
                msjAlertaApoderado.Text = "";

                var apoderadoCache = Cache.Get("apoderado") as Apoderado;
                apoderadoCache = apoderado;
                Cache.Insert("apoderado",apoderadoCache);

            }
            else
            {
                txtNombresCompletosApoderado.Text = "";
                msjAlertaApoderado.Text = "El apoderado no existe";

            }
        }

        protected void chlCaracteristicas_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtDocumentos.Text = "";
            hfDocumentos.Value = "";

            for (int i = 0; i < chlDocumentos.Items.Count; i++)
            {
                if (chlDocumentos.Items[i].Selected)
                {
                    txtDocumentos.Text += chlDocumentos.Items[i].Text + "\n";
                    hfDocumentos.Value += chlDocumentos.Items[i].Text + ",";

                }
            }

            btnShowPanel_ModalPopupExtender.Show();
            

        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            var accion = Request.QueryString["acc"];


            var idSeccionABuscar = Int32.Parse(ddlSeccion.SelectedValue.ToString());
            var seccionAGuardar = SeccionService.GetSeccionById(idSeccionABuscar);
            seccionAGuardar.CantidadDeInscritos += 1;

            var idAñoAGuardar = Int32.Parse(ddlAñoAcademico.SelectedValue.ToString());
            var añoAGuardar = AñoAcademicoService.GetAñoAcademicoById(idAñoAGuardar);


            var AlumnoAGuardar = Cache.Get("alumno") as Alumno;
            var ApoderadoAGuardar = Cache.Get("apoderado") as Apoderado;
         

            AlumnoAGuardar.IdApoderado = ApoderadoAGuardar.Id;
            AlumnoAGuardar.Apoderado = ApoderadoAGuardar;
           // AlumnoService.ActualizarAlumno(AlumnoAGuardar);

            var matricula = new Matricula()
            {
                IdSeccion = seccionAGuardar.Id,
                Seccion = seccionAGuardar,
                IdAlumno = AlumnoAGuardar.Id,
                Alumno = AlumnoAGuardar,
                IdAñoAcademico = idAñoAGuardar,
                AñoAcademico = añoAGuardar,
                FechaMatricula = DateTime.Now,
                Promovido = true,
                Documentos = hfDocumentos.Value,
                Estado = true
            };

            if (accion == "nuevo")
            {
                var matriculaExiste = MatriculaService.GetMatricula(idAñoAGuardar, AlumnoAGuardar.Id);

                if (matriculaExiste == null)
                {

                    MatriculaService.AddMatricula(matricula);
                    msjConfirmGuardMatricula.Text = "Se guardo exitosamente";

                    Response.Redirect("Matriculas.aspx");
                }
                else
                {
                    msjConfirmGuardMatricula.Text = "ERROR El alumno ya está matriculado";
                }
            }
            else if (accion == "editar")
            {
                var id = Request.QueryString["id"];

                matricula.Id = Int32.Parse(id);

                MatriculaService.UpdateMatricula(matricula);

                Response.Redirect("Matriculas.aspx");

            }






        }

        protected void ddlTipoDocumentoApoderadoPanel_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnAgregarApoderado_ModalPopupExtender.Show();
        }

        protected void ddlGeneroApoderadoPanel_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnAgregarApoderado_ModalPopupExtender.Show();
            
        }

        protected void btnGuardarApoderadoPanel_Click(object sender, EventArgs e)
        {
            var apoderado = ApoderadoService.GetApoderadoByTipoDocumentoNroDocumento(ddlTipoDocumentoApoderadoPanel.Text,
                    txtNroDocumentoApoderadoPanel.Text);



            if (apoderado == null)
            {
                var apoderadoAGurdar = new Apoderado()
                {
                    TipoDeDocumento = ddlTipoDocumentoApoderadoPanel.SelectedValue,
                    NroDocumento = txtNroDocumentoApoderadoPanel.Text,
                    Apellidos = txtApellidosApoderadoPanel.Text,
                    Nombres = txtNombresApoderadoPanel.Text,
                    Genero = ddlGeneroApoderadoPanel.SelectedValue,
                    FechaNacimiento = DateTime.Parse(txtFechaNacApoderadoPanel.Text),
                    Departamento = txtDepartamentoApoPanel.Text,
                    Provincia = txtProvinciaApoPanel.Text,
                    Distrito = txtDiscritoApoPanel.Text,
                    Domicilio = txtDomicilioApoPanel.Text,
                    Telefono = txtTelefonoApoPanel.Text,
                    CentroDeTrabajo = txtCentroTrabApoPanel.Text,
                    Estado = true

                };
               // ApoderadoService.RegistrarApoderado(apoderadoAGurdar);
                txtNroDocumentoApoderado.Text = apoderadoAGurdar.NroDocumento;
                txtNombresCompletosApoderado.Text = apoderadoAGurdar.Nombres + " " + apoderadoAGurdar.Apellidos;
                ddlTipoDocumentoApoderado.SelectedValue = ddlTipoDocumentoApoderadoPanel.SelectedValue;
                msjAlertaApoderado.Text = "";
                msjAlertaApoderadoPanel.Text = "";


                var apoderadoCache = Cache.Get("apoderado") as Apoderado;
                apoderadoCache = apoderadoAGurdar;

                Cache.Insert("apoderado", apoderadoCache);


            }
            else
            {
                msjAlertaApoderadoPanel.Text = "El apoderado ya está registrado";
                btnAgregarApoderado_ModalPopupExtender.Show();
            }


            //combo
        }

        protected void ddlTipoDocumentoAlumnoPanel_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnAgregarAlumno_ModalPopupExtender.Show();
        }

        protected void ddlGeneroAlumnoPanel_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnAgregarAlumno_ModalPopupExtender.Show();
        }

        protected void btnAgregarApoderado_Click(object sender, EventArgs e)
        {
            //txtNroDocumentoApoderadoPanel.Text = txtNroDocumentoApoderado.Text;
            //ddlTipoDocumentoApoderadoPanel.SelectedValue = ddlTipoDocumentoApoderado.SelectedValue;
           
        }

        protected void btnAgregarAlumno_Click(object sender, EventArgs e)
        {


        }

        protected void btnGuardarAlumnoPanel_Click(object sender, EventArgs e)
        {

            var alumno =
                AlumnoService.GetAlumnoByTipoDocumentoNroDocumento(ddlTipoDocumentoAlumnoPanel.Text,
                    txtNroDocumentoAlumnoPanel.Text);

            if (alumno == null)
            {
                var alumnoAGurdar = new Alumno()
                {
                    TipoDeDocumento = ddlTipoDocumentoAlumnoPanel.SelectedValue,
                    NroDocumento = txtNroDocumentoAlumnoPanel.Text,
                    Apellidos = txtApellidosAlumnoPanel.Text,
                    Nombres = txtNombresAlumnoPanel.Text,
                    Genero = ddlGeneroAlumnoPanel.SelectedValue,
                    FechaNacimiento = DateTime.Parse(txtFechaNacAlumnoPanel.Text),
                    Departamento = txtDepartamentoAluPanel.Text,
                    Provincia = txtProvinciaAluPanel.Text,
                    Distrito = txtDiscritoAluPanel.Text,
                    Domicilio = txtDomicilioAluPanel.Text,
                    Telefono = txtTelefonoAluPanel.Text,
                    Estado = true

                };

                //AlumnoService.RegistrarAlumno(alumnoAGurdar);
                //ApoderadoService.RegistrarApoderado(alumnoAGurdar);
                txtNroDocumentoAlumno.Text = alumnoAGurdar.NroDocumento;
                txtNombresCompletosAlumno.Text = alumnoAGurdar.Nombres + " " + alumnoAGurdar.Apellidos;
                ddlTipoDocumentoAlumno.SelectedValue = ddlTipoDocumentoAlumnoPanel.SelectedValue;
                msjAlertaAlumno.Text = "";
                msjAlertaAlumnoPanel.Text = "";
                //combo
                var alumnoCache = Cache.Get("alumno") as Alumno;
                alumnoCache = alumnoAGurdar;
                Cache.Insert("alumno", alumnoCache);
            }
            else
            {
                msjAlertaAlumnoPanel.Text = "El alumno ya está registrado";
                btnAgregarAlumno_ModalPopupExtender.Show();
            }
        
    }

        protected void ddlAñoAcademico_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}